package com.dingwen.treasure.log.entity;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.redis.core.index.Indexed;

import java.io.Serializable;

/**
 * 　SystemOperatorLog: // TODO 复合索引
 * <pre>
 *     1. 注解
 *       Document(collation = "system_operator_log"): 对应集合名称。可以省略默认使用类小写映射集合
 *      CompoundIndex( def = "{'userId': 1, 'nickname': -1}") 符合索引
 *      Id: 主键标识，该属性的值会自动对应mongodb的主键字段"_id"，如果该属性名就叫“id”,则该注解可以省略，否则必须写
 *      Filed: 该属性对应mongodb的字段的名字，如果一致，则无需该注解
 *      Indexed: 添加一个单字段索引
 * </pre>
 * 　@author dingwen
 * 　@date 2022/6/26
 */
@ApiModel(value = "SystemOperatorLog", description = "系统操作日志文档对象")
@Document(collection = "system_operator_log")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
public class SystemOperateLog implements Serializable {

    private static final long serialVersionUID = 2148440606035982863L;


    /**
     * 文档主键
     */
    @ApiModelProperty(value = "文档主键")
    @Id
    private String id;

    /**
     * 所属系统模块
     */
    @ApiModelProperty(value = "所属系统模块")
    @Field(value = "module")
    private String module;

    /**
     * 操作人Id
     */
    @ApiModelProperty(value = "操作人id")
    @Indexed
    @Field(value = "operator_id")
    private String operatorId;

    /**
     * 用户详细信息 （在log模块查询数据库完善）
     */
    @ApiModelProperty(value = "用户详细信息")
    @Field(value = "user_info")
    private String userInfo;

    /**
     * 请求参数
     */
    @ApiModelProperty(value = "请求参数")
    @Field(value = "request")
    private String request;

    /**
     * 资源名称
     */
    @ApiModelProperty(value = "资源名称")
    @Field(value = "resource_name")
    private String resourceName;

    /**
     * 业务主键
     */
    @ApiModelProperty(value = "业务主键")
    @Indexed
    @Field(value = "business_id")
    private String businessId;


    /**
     * 操作类型
     */
    @ApiModelProperty(value = "操作类型")
    @Field(value = "operate_type")
    private String operateType;

    /**
     * 细节
     */
    @ApiModelProperty(value = "详细信息")
    @Field(value = "detail")
    private String detail;

    /**
     * 操作时间
     */
    @ApiModelProperty(value = "操作时间")
    @Field(value = "operate_time")
    private String operateTime;
}
